home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1992 / 09 / 2 / programmieren os2.0 / addappicon.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-01  |  6.0 KB  |  159 lines

  1. #include <exec/memory.h>
  2. #include <intuition/intuition.h>
  3. #include <workbench/startup.h>
  4. #include <workbench/workbench.h>
  5.  
  6. #ifdef LATTICE
  7. #include <stdio.h>
  8.   int CXBRK(void){ return (0); }
  9.   int chkabort(void){ return (0); }
  10.  
  11.   #include <clib/exec_protos.h>
  12.   #include <clib/intuition_protos.h>
  13.   #include <clib/icon_protos.h>
  14.   #include <clib/wb_protos.h>
  15. #endif
  16.  
  17. struct IntuitionBase *IntuitionBase=NULL;
  18. struct WorkbenchBase *WorkbenchBase=NULL;
  19.  
  20. USHORT IconImageDaten[] = {
  21.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  22.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  23.   0x0000,0x0040,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0,
  24.   0x0000,0x1000,0x0000,0x0000,0x0000,0x00C0,0x0000,0x3000,
  25.   0x0000,0x0000,0x0000,0x01C0,0x0000,0x7000,0x0000,0x0000,
  26.   0x0000,0x07C0,0x0000,0xF000,0x0000,0x0000,0x0000,0x1FC0,
  27.   0x0001,0xF000,0x0000,0x0000,0x0000,0x7FC0,0x0003,0x7000,
  28.   0x0000,0x0000,0x0001,0xFFC0,0x0007,0x700F,0x8000,0x0000,
  29.   0x0007,0xFFC0,0x000E,0x700C,0xC000,0x0000,0x001F,0xFFC0,
  30.   0x001F,0xF00C,0xDB1E,0x3B6C,0x78FF,0xFFC0,0x0038,0x700F,
  31.   0x9DB3,0x6676,0x0DFF,0xFFC0,0x0070,0x700C,0x19B3,0x6666,
  32.   0x7FFF,0xFFC0,0x00E0,0x700C,0x1833,0x3C60,0xDFFF,0xFFC0,
  33.   0x01F1,0xF80C,0x181E,0xC660,0x7FFF,0xFFC0,0x0000,0x0000,
  34.   0x0000,0x7C01,0xFFFF,0xFFC0,0x0000,0x0000,0x0000,0x0007,
  35.   0xFFFF,0xFFC0,0x0000,0x0000,0x0000,0x001F,0xFFFF,0xFFC0,
  36.   0x07FF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFC0,0x0000,0x0000,
  37.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  38.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  39.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  40.   0x0000,0x0000,0x0000,0x0000,0x0FFF,0xFFFF,0xFFFF,0xFFFF,
  41.   0xFFFF,0xFF80,0x0D55,0x5555,0x5555,0x5555,0x5555,0x5500,
  42.   0x0D55,0x4555,0x5555,0x5555,0x5555,0x5500,0x0D55,0x4555,
  43.   0x5555,0x5555,0x5555,0x5500,0x0D55,0x0555,0x5555,0x5555,
  44.   0x5555,0x5700,0x0D55,0x0555,0x5555,0x5555,0x5555,0x5F00,
  45.   0x0D54,0x0555,0x5555,0x5555,0x5555,0x7F00,0x0D54,0x0555,
  46.   0x5555,0x5555,0x5555,0xFF00,0x0D50,0x0550,0x5555,0x5555,
  47.   0x5557,0xFF00,0x0D51,0x0551,0x1555,0x5555,0x555F,0xFF00,
  48.   0x0D40,0x0551,0x0441,0x4411,0x0533,0x3300,0x0D45,0x0550,
  49.   0x4044,0x1101,0x5111,0x1100,0x0D05,0x0551,0x4444,0x1111,
  50.   0x0329,0x2900,0x0D15,0x0551,0x4544,0x4115,0x1339,0x3900,
  51.   0x0C04,0x0551,0x4541,0x1115,0x0339,0x3900,0x0D55,0x5555,
  52.   0x5555,0x0155,0xFFFF,0xFF00,0x0D55,0x5555,0x5555,0x5557,
  53.   0xFFFF,0xFF00,0x0D55,0x5555,0x5555,0x555F,0xFFFF,0xFF00,
  54.   0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  55.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  56.   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
  57. };
  58.  
  59. struct Image IconImage = {
  60.   0,0,
  61.   94,24,
  62.   2,
  63.   IconImageDaten,
  64.   0x0003,0x0000,
  65.   NULL
  66. };
  67.  
  68. struct DiskObject AmigaAppIcon = {
  69.   NULL, NULL,
  70.   {
  71.     NULL, 0, 0, 94, 24,
  72.     GADGHIMAGE,
  73.     NULL, NULL,
  74.     (APTR) &IconImage,
  75.     (APTR) &IconImage,
  76.     NULL, NULL, NULL, 0,
  77.     NULL,
  78.   },
  79.   NULL, NULL, NULL,
  80.   NO_ICON_POSITION,
  81.   NO_ICON_POSITION,
  82.   NULL, NULL, NULL
  83. };
  84.  
  85. void main() {
  86.   struct MsgPort *msgport;
  87.   struct Window  *window;
  88.   struct AppIcon *appicon;
  89.   struct IntuiMessage *imsg;
  90.   struct AppMessage *appmsg;
  91.   struct WBArg   *argptr;
  92.   ULONG  IconID = 1, UserData = 0;
  93.   BOOL   ABORT = FALSE;
  94.   UBYTE  i;
  95.  
  96.   if( IntuitionBase=OpenLibrary("intuition.library", 37)) {
  97.     if( WorkbenchBase=OpenLibrary("workbench.library", 37)) {
  98.       /*
  99.        * Den benötigten Message-Port erstellen
  100.        */
  101.       if( msgport=CreateMsgPort() ) {
  102.         if( window=OpenWindowTags( NULL, WA_Left,  10,   WA_Top, 10,
  103.                                          WA_Width, 320, WA_Height, 50,
  104.                                          WA_IDCMP, CLOSEWINDOW,
  105.                                          WA_Flags, WINDOWCLOSE | WINDOWDRAG,
  106.                                          WA_Title, "AmigaAppWindow", TAG_END)) {
  107.           /*
  108.            * Hier erfolgt der Eintrag des Application-Icons
  109.            */
  110.           if( appicon=AddAppIcon(IconID, UserData, "AmigaAppIcon", msgport, NULL, &AmigaAppIcon, NULL)) {
  111.             do {
  112.               /*
  113.                * Nun warten wir entweder auf eine IDCMP-Message
  114.                * oder eine AppMessage
  115.                */
  116.               Wait(1 << window->UserPort->mp_SigBit | 1 << msgport->mp_SigBit);
  117.               while( imsg=(struct IntuiMessage *)GetMsg(window->UserPort)) {
  118.                 if( imsg->Class=CLOSEWINDOW )
  119.                   ABORT=TRUE;
  120.                   ReplyMsg((struct Message *) imsg);
  121.               }
  122.               while( appmsg=(struct AppMessage *)GetMsg(msgport)) {
  123.                 /*
  124.                  * Die AppMessage kann nur vom Typ MTYPE_APPWINDOW sein.
  125.                  * ID und userdata sind die von uns vorgegebenen Werte.
  126.                  * Mit NumArgs lassen sich die Workbench-Argumente aus-
  127.                  * lesen.
  128.                  */
  129.                 printf("AppMsg=%lx, Typ=%ld, ID=%ld, UserData=%ld, NumArgs=%ld\n",
  130.                               appmsg, appmsg->am_Type, appmsg->am_ID,
  131.                               appmsg->am_UserData, appmsg->am_NumArgs);
  132.  
  133.                 /*
  134.                  * Jetzt die Argumente auswerten. Ist am->NumArgs 0, wurde
  135.                  * ein Doppelklick auf das Icon ausgeübt, ansonsten wurden
  136.                  * ein oder mehrere Icons auf das Symbol gezogen.
  137.                  */
  138.  
  139.                 argptr = appmsg->am_ArgList;
  140.                 for(i = 0; i < appmsg->am_NumArgs; i++) {
  141.                    printf("Argument(%ld): Name='%s', Lock=%lx\n",
  142.                                 i, argptr->wa_Name, argptr->wa_Lock);
  143.                    argptr++;
  144.                 }
  145.                 ReplyMsg((struct Message *)appmsg);
  146.               }
  147.             } while (ABORT == FALSE);
  148.             RemoveAppIcon(appicon);
  149.           } else printf("Das AppIcon konnt nicht eingerichtet werden\n");
  150.           CloseWindow(window);
  151.         } else printf("Konnte Fenster nicht öffnen\n");
  152.         DeleteMsgPort(msgport);
  153.       } else printf("Konnte Message-Port nicht einrichten\n");
  154.       CloseLibrary(WorkbenchBase);
  155.     } else printf("Konnte workbench.library nicht öffnen\n");
  156.     CloseLibrary(IntuitionBase);
  157.   } else printf("Konnte intuition.library nicht öffnen\n");
  158. }
  159.